// 封装 axios 配置请求根路径
// 1. 开发   请求根路径  http://localhost:8989/api
// 2. 生产   另外的请求根路径 http://www.aaa.com/api

// 优点达项目 生产的 请求根路径 http://124.223.14.236:8060/admin

// 需要根据环境变量来做判断

import store from '@/store'
import axios from 'axios'

import { Message } from 'element-ui'

// 创建axios的实例对象 （并配置请求根路径 + 超时时间）
const instance = axios.create({
  //   baseURL:
  //     process.env.NODE_ENV === 'development'
  //       ? 'http://124.223.14.236:8060/admin'
  //       : 'http://124.223.14.236:8060/admin',

  // baseURL的改写
  baseURL: process.env.VUE_APP_BASEURL,
  timeout: 10000
})

// instance 添加请求拦截器
instance.interceptors.request.use(
  (config) => {
    // Do something before request is sent
    // ! 去统一处理token ==> 获取token 导入 store
    // 判断token是否存在，如果有才在header中带上token发给服务器
    const token = store.state.user.token

    if (token) {
      // 具体如何携带token，一定要看接口文档的要求
      // x-token 需要采取 中括号写法
      config.headers['x-token'] = token
    }
    return config
  },
  (error) => {
    // Do something with request error
    return Promise.reject(error)
  }
)

// 响应拦截器
instance.interceptors.response.use(
  (response) => {
    // Do something before response is sent

    // 换种写法 统一的处理数据 + 提示
    // console.log(response.data) // 服务器响应的数据

    // 把服务器响应的数据 进行解构
    const { data, errmsg, errno } = response.data
    // console.log(data, errmsg, errno)

    // errno 为 0表示业务办理成功是后端制定的
    if (errno === 0) {
      // 业务办理成功
      return data
    } else {
      // 业务办理失败了
      // 统一提示 + 返回失败错误的promise对象
      Message.error(errmsg)
      return Promise.reject(errmsg)
    }
  },
  (error) => {
    // console.log('失败了吗')

    // Do something with response error
    return Promise.reject(error)
  }
)

// 导出axios的实例对象
export default instance
